#include "bib_Linea_Comando.h"

extern HANDLE mutexDisco;

int parsearLinea(char *comando, long *dirLogicas, int *cantSectores);

int ejecutarComando(char *comando, char *flagSalir){

	long dirLogicas [CANT_MAX_PARAMETROS];
	int cantSectores;
	
	if (tomarControlMutex(mutexDisco))
		return EXIT_FAILURE;
	
	if (parsearLinea(comando, dirLogicas, &cantSectores))
		return EXIT_FAILURE;

	if (!strcmp("posicionCabezal", comando))
		if (!cantSectores){
			if (mostrarPosicionCabezal())
				return EXIT_FAILURE;
		}
		else
			imprimirLog(ERROR, "No se necesitan parametros para", comando);
			
	else if (!strcmp("obtenerSectores", comando))
		if (cantSectores){
			if (obtenerSectores(dirLogicas, cantSectores, FLAG_COMANDO))
				return EXIT_FAILURE;
		}
		else
			imprimirLog(ERROR, "Se necesita ingresar por lo menos un numero de sector para el comando", comando);

	else if (!strcmp("salir", comando))
			if (!cantSectores)
				*flagSalir = 0;
			else
				imprimirLog(ERROR, "No se necesitan parametros para", comando);
			
	else
		imprimirLog(ERROR, "Comando desconocido:", comando);
		
	if (liberarControlMutex(mutexDisco))
		return EXIT_FAILURE;
	
	return EXIT_SUCCESS;
}
/*=====================================================================================*/
int parsearLinea(char *comando, long *dirLogicas, int *cantSectores){

	char *aux1;
	char *aux2;
	int i;
	
	aux1 = strtok(comando, ")");
	strtok(aux1, "(");
	
	for(i = 0; i < 5; i++){
		*cantSectores = i;
		
		if ((aux2 = strtok(NULL, ",")))
			*(dirLogicas + i) = atol(aux2);
		else
			return EXIT_SUCCESS;
		
		if ((!*(dirLogicas + i)) && (*aux2 != '0'))
			return EXIT_SUCCESS;
	}
	
	if (strtok(NULL, ","))
		imprimirLog(WARNING, "Demasiados parametros, se tomaran solo los primeros 5", "");
		
	*cantSectores = i;	
	return EXIT_SUCCESS;
}